iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Vue.js

Vue3歡樂套件箱耶系列 第 21

開箱21:提示/彈出視窗元件輕鬆套!~Vue 3 Popper範例應用

  • 分享至 

  • xImage
  •  

還記得昨篇開箱:前端用戶導覽這樣做~v-onboarding範例應用,其中導覽的框是依賴PopperJS做出來的,那我們今天要介紹在Vue3中可以使用的視窗元件

介紹

Vue 3 Popper是一個用來顯示彈出視窗的元件。它是用Vue3編寫的,並使用最新版本的PopperJS

官方網站:https://valgeirb.github.io/vue3-popper/

https://ithelp.ithome.com.tw/upload/images/20231006/20142016joPNAPCUCS.png

安裝

npm install vue3-popper
或
yarn add vue3-popper

引用

全域
//main.js

import { createApp } from "vue";
import Popper from "vue3-popper";

const app = Vue.createApp({});
app.component("Popper", Popper);

或者
組件內

<template>
  <Popper content="...">
    ...
  </Popper>
</template>

<script>
  import Popper from "vue3-popper"; // 引用

  export default({
    components: {
      Popper,
    },
  });
</script>

典型範例

<template>
  <Popper content="This is the Popper content 🍿">
    <button>Demo</button>
  </Popper>
</template>

<script>
  import Popper from "vue3-popper";

  export default ({
    components: {
      Popper,
    },
  });
</script>

▲▲▲ 若沒有寫css,會是沒有樣式的提示框

所以我們可以加上css,顏色都還可以自行改(可以寫在組件內,或者拉出去寫一個theme.css)

  • 這樣的寫法,記得寫全域不要包< style scoped >...
<style>
:root {
  --popper-theme-background-color: #ffffff;
  --popper-theme-background-color-hover: #ffffff;
  --popper-theme-text-color: inherit;
  --popper-theme-border-width: 1px;
  --popper-theme-border-style: solid;
  --popper-theme-border-color: #eeeeee;
  --popper-theme-border-radius: 6px;
  --popper-theme-padding: 16px;
  --popper-theme-box-shadow: 0 6px 30px -6px rgba(0, 0, 0, 0.25);
}
</style>

另外,若不想要使用官方預設的css變數(--popper...),可以使用:deep selector來解決

詳細可看 官方文件I don't want to use CSS variables

成果如下
https://ithelp.ithome.com.tw/upload/images/20231006/20142016VrJbfaCxZB.png

前往 >> 小試身手

進階應用

  • 如果想要包成自己寫的元件方式

詳細可看 官方文件How can I wrap Popper with my own component?

  • 增加打開視窗後的方法

詳細可看 官方文件Reacting to Popper events

  • 要將內容重包

詳細可看 官方文件Using scoped slot properties

  • 自動化控制Popper

詳細可看 官方文件Manually controlling the Popper

API屬性介紹

Props

屬性 預設 描述
placement bottom 彈窗位置
disableClickAway false 當用戶點擊 Popper 以外的地方時,是否自動關閉 Popper
offsetSkid 0 沿著觸發元素的像素偏移量
offsetDistance 12 離觸發元素的像素偏移量
hover false 是否在懸停時觸發 Popper
arrow false 是否在 Popper 上顯示箭頭
arrowPadding 0 阻止箭頭到達 Popper 的邊緣(以像素為單位)
disabled false 是否禁用 Popper。如果它已經打開,它將被關閉
openDelay 0 延遲(毫秒)後打開 Popper
closeDelay 0 延遲(毫秒)後關閉 Popper
interactive true Popper 應該是互動式的,如果改為flase,則可以透過點擊Popper關閉它(If the Popper should be interactive, it will close when clicked/hovered if false)
content null 如果您的內容只是一個簡單的字符串,您可以將其作為一個 prop 傳遞。
show null 手動控制Popper,如果設置為true/false,其他事件(點擊、懸停)將被忽略。
zIndex 9999 彈窗的 z-index
locked bottom 鎖定Popper位置,如果設置為true,當它缺少空間時,它將不會動態翻轉。

Events

方法 描述
open:popper 當 Popper 打開時
close:popper 當 Popper 隱藏時

Slots(插槽)

屬性 描述
content 用於 Popper 內容

Slot props

屬性 類型 描述
close function 一個用於關閉 Popper 的函數
isOpen boolean Popper 的開放狀態

CSS variables

Popper 預設只帶有一些基本樣式。您可以覆蓋這些變數以適應您的需求。

CSS variable Example value
--popper-theme-background-color #ffffff
--popper-theme-background-color-hover #ffffff
--popper-theme-text-color inherit
--popper-theme-border-width 1px
--popper-theme-border-style solid
--popper-theme-border-color #eeeeee
--popper-theme-border-radius 6px
--popper-theme-padding 16px
--popper-theme-box-shadow 0 6px 30px -6px rgba(0, 0, 0, 0.25)

/images/emoticon/emoticon29.gif
那我們明天再見了~


上一篇
開箱20:前端用戶導覽這樣做~v-onboarding範例應用
下一篇
開箱22:效能優化?記憶化(Memoization)~Vue範例應用
系列文
Vue3歡樂套件箱耶30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言